home *** CD-ROM | disk | FTP | other *** search
- Class Bag :Collection
- ! dict count !
- [
- new
- dict <- Dictionary new
- |
- add: newElement
- dict at: newElement
- put: (1 + (dict at: newElement ifAbsent: [0]))
- |
- add: newObj withOccurrences: anInteger
- anInteger timesRepeat: [ self add: newObj ].
- ^ newObj
- |
- remove: oldElement ifAbsent: exceptionBlock ! i !
- i <- dict at: oldElement
- ifAbsent: [ ^ exceptionBlock value].
-
- (1 = i) ifTrue: [dict removeKey: oldElement]
- ifFalse: [dict at: oldElement put: i - 1 ]
- |
- size
- ^ dict inject: 0 into: [:x :y | x + y]
- |
- occurrencesOf: anElement
- ^ dict at: anElement ifAbsent: [0]
- |
- first
- (count <- dict first) isNil ifTrue: [^ nil].
- count <- count - 1.
- ^ dict currentKey
- |
- next
- [count notNil] whileTrue:
- [ (count > 0)
- ifTrue: [count <- count - 1. ^ dict currentKey]
- ifFalse: [(count <- dict next) isNil
- ifTrue: [^ nil] ]].
- ^ nil
- ]
-